/*
 * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef __PARTITION_H__
#define __PARTITION_H__

#include <cassert.h>
#include <types.h>

#if !PLAT_PARTITION_MAX_ENTRIES
# define PLAT_PARTITION_MAX_ENTRIES    128
#endif    /* PLAT_PARTITION_MAX_ENTRIES */

CASSERT(PLAT_PARTITION_MAX_ENTRIES <= 128, assert_plat_partition_max_entries);

#define PARTITION_BLOCK_SIZE        512

#define EFI_NAMELEN            36

typedef struct partition_entry {
    uint64_t        start;
    uint64_t        length;
    char            name[EFI_NAMELEN];
} partition_entry_t;

typedef struct partition_entry_list {
    partition_entry_t    list[PLAT_PARTITION_MAX_ENTRIES];
    int            entry_count;
} partition_entry_list_t;

int load_partition_table(unsigned int image_id);
const partition_entry_t *get_partition_entry(const char *name);
const partition_entry_list_t *get_partition_entry_list(void);
void partition_init(unsigned int image_id);

#endif    /* __PARTITION_H__ */
